<?php
/**
 * View_Order
 *
 * Класс View_Order отвечает за вывод информации, связанной с заказами
 *
 */
class View_Order extends View_Base {

	/**
	 * Выводит форму добавления заказа
	 * 
	 * @param Order $objOrder - объект заказа
	 * @param $actionType - тип операции(edit, add)
	 */
	public function showAddForm(Order $objOrder, $actionType) {
		Service_Debug::setDebug();
		$objSession = User_Session::instance();
		if($actionType == 'add') $objUser = User_User::getUser();
		
		// Заменяем id городов на их названия
		$objCity = new City();
		$objOrder->setField('city_from_string', $objCity->getNameById($objOrder->getField('city_from')));
		$objOrder->setField('city_to_string', $objCity->getNameById($objOrder->getField('city_to')));
		
		echo '<div class="full-border">';
		if($actionType == 'add') echo '<div class="subtitle-top-radius">ДОБАВЛЕНИЕ ЗАЯВКИ НА ГРУЗОПЕРЕВОЗКУ</div>';
		else echo '<div class="subtitle-top-radius">РЕДАКТИРОВАНИЕ ГРУЗА</div>';
			echo '<div class="simple-content">';
				$objForm = new Form_ViewForm(array(
					'errorIfExists' => true,
					'leftWidth' => 320,
					'viewFormType' => 'div',
					'id' => 'order-add-form'
				), $objOrder);
				echo '<div class="add-form">';
					$objForm->show();
					if(!$objSession->isLoggedIn()) echo '<p class="important-info">Вы не авторизованы.<a href="' . W_ABSPATH . 'auth/sign_in"> Войдите </a>на сайт или продолжите оформлениe заказа, дополнительно указав данные для регистрации.</p>';
					echo '<p class="grey">Здездочкой (<span class="required">*</span>) отмечены поля обязательные для заполнения</p>';
					
					echo '<div class="add-order-block">';						
						echo '<div class="subtitle">Маршрут</div>';
						$objForm->textField(array('text' => 'Откуда', 'required' => 1, 'class' => 'city-field'), 'city_from_string');
						$objForm->hiddenField(array('class' => 'ID_city'), 'city_from');
						
						$objForm->textField(array('text' => 'Куда', 'required' => 1, 'class' => 'city-field'), 'city_to_string');
						$objForm->hiddenField(array('class' => 'ID_city'), 'city_to');
						
						echo '<div class="subtitle">Опсиание груза</div>';
						$objForm->textField(array('text' => 'Тип груза', 'min' => 2, 'maxlength' => '1024','class' => 'mandatory', 'required' => 1), 'description');
						$objForm->textField(array( 'text' => 'Масса груза', 'class' => 'number',  'maxlength' => '4'), 'weight');
						$objForm->textField(array( 'text' => 'Объём груза', 'class' => 'number',  'maxlength' => '4'), 'volume');
				
						echo '<div class="subtitle">Контактные данные</div>';
						if($actionType == 'add') $objForm->textField(array('text' => 'Контактное лицо', 'value' => $objUser->id ? $objUser->getField('first_name') : ''), 'contact_person');
						else $objForm->textField(array('text' => 'Контактное лицо'), 'contact_person');
						
						if($actionType == 'add') $objForm->textField(array('text' => 'Контактный телефон (1)', 'value' => $objUser->id ? $objUser->getField('phone') : '', 'class' => 'phone mandatory', 'required' => 1), 'one_phone');
						else $objForm->textField(array('text' => 'Контактный телефон (1)', 'class' => 'phone mandatory', 'required' => 1), 'one_phone');
						$objForm->textField(array('text' => 'Контактный телефон (2)', 'class' => 'phone'), 'another_phone');
						
						// Если идёт добавление/редактирование заказа и редактор - администратор, то добавляем поле для привязки к заказу водителя и поля с ценами
						if(SimpleAdministration::isAdmin()) {
							$driverArray = $objOrder->getDriver();
							$objOrder->setField('driver_string',!empty($driverArray) ? $driverArray['last_name'] . ' ' . $driverArray['first_name'] : '');
							
							$objForm->textField(array('text' => 'Водитель заказа', 'class' => 'driver-field'), 'driver_string');
							$objForm->hiddenField(array('class' => 'ID_driver'), 'ID_driver');
							
							$objForm->textField(array('text' => 'Цена клиента', 'class' => 'number'), 'clients_price');
							$objForm->textField(array('text' => 'Наша цена', 'class' => 'number'), 'our_price');
							$arr = array('Нет данных','Без предоплаты','Частичная','Полная');
							$objForm->selectField(array('text' => 'Предоплата', 'optionsArray' => $arr), 'prepayment_type');
							echo '<div ' . ($objOrder->getField('prepayment_type') == 0 || $objOrder->getField('prepayment_type') == 1 ? 'class="hidden"' : '') . '>';
								$objForm->textField(array('text' => 'Сумма или процент', 'class' => 'number'), 'prepayment');
							echo '</div>';
							
							$objForm->textField(array('text' => 'Предварительная дата сдачи', 'class' => 'with-date'), 'delivery_date_plan');
							$objForm->textField(array('text' => 'Итоговая дата сдачи','class' => 'with-date'), 'delivery_date_fact');
						}
				echo '</div>';	
				
				if(SimpleAdministration::isAdmin() && $objOrder->id) {
					//Определяем эти параметры здесь, т.к. в методе они используются 2 раза. Так можно было это считать в самом методе getSuitableDrivers
					// Определяем категории грузоподъёмности (1 - 2т, 2 - 2-5т, 3 - 5-10т, 4 - 10-15т, 5 - 15-20т, 6 - более 20т)
					$weight = $objOrder->getField('weight');
					if(!$weight) $weightCategory = null;
					elseif($weight < 2) $weightCategory = 1;
					elseif($weight < 5) $weightCategory = 2;
					elseif($weight < 10) $weightCategory = 3;
					elseif($weight < 15) $weightCategory = 4;
					elseif($weight < 20) $weightCategory = 5;
					else $weightCategory = 6;
					
					// Определяем длину маршрута
					$distance = Route::getRouteLength($objOrder->getField('city_from'), $objOrder->getField('city_to'));
					
					if($distance) {
						$driversArray = $objOrder->getSuitableDrivers($weightCategory, $distance);
						echo '<div class="driver-list">';
						if(!empty($driversArray)) {
							echo '<div class="subtitle">Подходящие водители</div><a id="all-var" class="variant" href="#">Все параметры</a><a id="m-var" class="variant" href="#">Тоннаж</a><a id="l-var" class="variant" href="#">Расстояние</a>';
							foreach ($driversArray as $idDriver => $driverArray) {
								echo '<div class="driver-item" w-category="' . $driverArray['weight'] . '" dist="' . $driverArray['distance'] . '" iddr="' . $idDriver . '">';
								echo '<a class="name" href="#">' . $driverArray['last_name'] . ' ' . $driverArray['first_name'] . '</a>';
								echo '<div class="icon-wrap">';
								echo '<a class="driver-card-link status_item" href="' . W_ABSPATH . 'drivers?id=' . $idDriver . '"></a>';
								echo '</div>';
								echo '</div>';
							}
						}
						else echo '<div class="subtitle">Подходящих водителей нет</div>';
						echo '</div>';
					}
				}
		
				if(!$objSession->isLoggedIn()) {
					echo '<div id="reg-in-order">';
						echo '<div class="subtitle">Данные для регистрации</div>';
	  	 					$objForm->textField(array('maxlength' => '64', 'text' => 'Имя','class' => 'mandatory', 'required' => 1), 'first_name');
	  	 					$objForm->textField(array('maxlength' => '64', 'text' => 'Фамилия', 'class' => 'mandatory', 'required' => 1), 'last_name');
	  	 					$objForm->textField(array('maxlength' => '128', 'text' => 'Электронная почта','class' => 'e_mail', 'required' => 1), 'e_mail');
	  	 					$objForm->passwordField(array('maxlength' => '32', 'text' => 'Пароль', 'class' => 'pass', 'required' => 1), 'pass');
	  	 					$objForm->passwordField(array('maxlength' => '32', 'class' => 'pass-confirm','text' => 'Подтверждение пароля', 'required' => 1), 'pass_confirmation');
	  	 					//$objForm->kaptchaField(array('maxlength' => '6', 'text' => 'Введите код', 'required' => 1, 'value' => '' , 'class' => 'kaptchaInput'), 'kaptcha');
	  	 				echo '</div>';
				}
				echo '<div class="clear"></div>';
				$objForm->submitButton(array('value' => 'Отправить', 'class' => 'gr-bg btn'), 'save');
				
				$objForm->close();
			echo '</div>';
		echo '</div>';
	}
	
	/**
	 * (non-PHPdoc)
	 * @see View_Base::showOneInList()
	 */
	public function showOneInAdminList(&$orderArray) {
		Service_Debug::setDebug();
		echo '<tr id="' . $orderArray['ID_order'] . '" class="order">';
			echo '<td>';
				echo '<a href="' . W_ABSPATH . 'orders/' . $orderArray['ID_order'] . '">№ ' . $orderArray['ID_order'] . '</a>';
			echo '</td>';
			echo '<td>';
				echo $orderArray['from'];
			echo '</td>';
			echo '<td>';
				echo $orderArray['to'];
			echo '</td>';
			echo '<td>';
				echo $orderArray['description'];
			echo '</td>';
			echo '<td>';
			echo Service_Date::changeDateFormat($orderArray['created_at'], 'Y-m-d H-i-s', 'j R Y');
			echo '</td>';
			echo '<td>';
				if(SimpleAdministration::isAdmin()) {
					if($orderArray['is_fast_order'] == 1 && $orderArray['call_to_client'] == 0)echo '<div title="Клиент ждёт звонка" class="exclamation-icon"></div>';
					echo '<a href="' . W_ABSPATH . 'orders/edit/' . $orderArray['ID_order'] .'" title="Редактировать заказ" class="edit-icon"></a>';
				}
			echo '</td>';
		echo '</tr>';
	}
	
	/**
	 * Метод отображает список Заказов
	 *
	 * @param array orderArray - массив информации о заказах
	 */
	public function showAdminList(array &$ordersArray = null) {
		Service_Debug::setDebug();
		echo '<div class="content-container">';
			echo '<h2><a href="' . W_ABSPATH . 'orders/add"> Добавить заказ</a></h2>';
			if ($ordersArray == null) echo 'Здесь будет отображаться список оставленных Вами заказов.';
			else {
				echo '<a href="' . W_ABSPATH . 'orders" class="t-variant' . ($ordersArray[0]['is_fast_order'] == 0 ? ' choosen' : '') . '">Обычные</a>';
				echo '<a href="' . W_ABSPATH . 'orders?option=fast" class="t-variant' . ($ordersArray[0]['is_fast_order'] == 1 ? ' choosen' : '') . '">Быстрые</a>';
				echo '<table class="essence-list orders-list">';
				echo '<tr>';
					echo '<td>';
						echo 'Номер заказа';
					echo '</td>';
					echo '<td>';
						echo 'Откуда';
					echo '</td>';
					echo '<td>';
						echo 'Куда';
					echo '</td>';
					echo '<td>';
						echo 'Описание груза';
					echo '</td>';
					echo '<td>';
						echo 'Опубликовано';
					echo '</td>';
					echo '<td>';
						
					echo '</td>';
				echo '</tr>';
					foreach ($ordersArray as $orderArray) {
						$this->showOneInAdminList($orderArray);
					}
				echo '</table>';
			}
		echo '</div>';
	}
	
	/**
	 * Метод отображает страницу заказа
	 *
	 * @param Order $objOrder - объект заказа
	 */
	public function showOrderPage($objOrder) {
		Service_Debug::setDebug();
		
		$idDriver = User_User::isDriver();
		$isCompositive = false;
		$routeArray = Route::getRouteArrayByIds($objOrder->getField('city_from'), $objOrder->getField('city_to'));
		if(empty($routeArray)) { // Если в БД нет заданного маршрута, то формируем составной маршрут из имеющихся
			$isCompositive = true;
			$routeArray = Route::getCompositeRoute($objOrder->getField('city_from'), $objOrder->getField('city_to'));
		}
		
		$distance = 0;
		if($routeArray) {
			echo '<div data-markers=\'' . json_encode($routeArray) . '\' class="' . ($isCompositive ? 'compositive' : 'simple') . '" id="map-data"></div>';
			foreach($routeArray as $distanceArray) {
				$distance += $distanceArray['distance_to_next'];
			}
		}
		echo '<div class="full-border">';
			echo '<div class="subtitle-top-radius">ОПИСАНИЕ ЗАКАЗА</div>';
			echo '<div class="simple-content">';
				echo '<input type="hidden" id="ID_order" value="' . $objOrder->id . '">';
				echo '<div class="top-actions">';	
					if(!SimpleAdministration::isAdmin()) { // Статус заказа для обычных пользователей
						$status = '';
						if(!$objOrder->getField('loaded')) $status = 'ожидает выполнения';
						elseif($objOrder->getField('loaded') && !$objOrder->getField('unloaded')) $status = 'выполняется';
						elseif($objOrder->getField('loaded') && $objOrder->getField('unloaded')) $status = 'выполнен';
						
						echo '<div class="order-stat">';
							echo 'Статус заказа - <span class="">' . $status . '</span>';
						echo '</div>';
					}
					
					if(SimpleAdministration::isAdmin()) { // Блок с картинками-статусами по заказу и блок управления заказом
						echo '<div class="statuses">';
							echo '<div class="icon-wrap">';
								// Клиент согласен работать
								if($objOrder->getField('client_agree') == 1) echo '<div class="status_item client_agree"></div>';
							echo '</div>';
							echo '<div class="icon-wrap">';
								// Заказ отменён
								if($objOrder->getField('canceled') == 1) {
									echo '<div class="status_item canceled"></div>';
									echo '<div class="hint-text">' . $objOrder->getField('canceled_comment') . '</div>';
								}
							echo '</div>';
							echo '<div class="icon-wrap">';
								// Загружено
								if($objOrder->getField('loaded') == 1) echo '<div class="status_item loaded"></div>';
							echo '</div>';
							echo '<div class="icon-wrap">';
								// Выгружено
								if($objOrder->getField('unloaded') == 1) echo '<div class="status_item unloaded"></div>';
							echo '</div>';
							echo '<div class="icon-wrap">';
								// Клиент оплатил
								if($objOrder->getField('client_pay') == 1) echo '<div class="status_item client-pay"></div>';
							echo '</div>';
							echo '<div class="icon-wrap">';
								// Оплачено водителю
								if($objOrder->getField('driver_pay') == 1) echo '<div class="status_item driver-pay"></div>';
							echo '</div>';
						echo '</div>';
						
						echo '<div class="atright controls">';
							echo '<a href="' . W_ABSPATH . 'orders/edit/' . $objOrder->id .'" title="Редактировать заказ" class="edit-icon"></a>';
							// Блок управления заказом
							echo '<div class="actions">';
								echo '<div id="order-controls">Работа по заказу';
									echo '<div class="drop-block">';
										if($objOrder->getField('is_fast_order')) {
											echo '<div class="control-item">';
												echo '<input type="checkbox" id="call-to-client" class="filter-checkbox">';
												echo '<label for="call-to-client"' . ($objOrder->getField('call_to_client') == 1 ? ' class="choosen-label"' : '') . '>Клиенту позвонили</label>';
											echo '</div>';
										}
										echo '<div class="control-item">';
											echo '<input type="checkbox" id="client_agree" class="filter-checkbox">';
											echo '<label for="client_agree"' . ($objOrder->getField('client_agree') == 1 ? ' class="choosen-label"' : '') . '>Клиент согласен</label>';
										echo '</div>';
										echo '<div class="control-item">';
											echo '<input type="checkbox" id="canceled" class="filter-checkbox">';
											echo '<label for="canceled"' . ($objOrder->getField('canceled') == 1 ? ' class="choosen-label"' : '') . '>Заказ отменён</label>';
										echo '</div>';
										echo '<div class="canceled-comment">';
											echo '<textarea></textarea>';
											echo '<button id="canceled-save">Сохранить</button>';
										echo '</div>';
										if($objOrder->getField('client_agree') == 1) {
											echo '<div class="control-item">';
												echo '<input type="checkbox" id="loaded" class="filter-checkbox">';
												echo '<label for="loaded"' . ($objOrder->getField('loaded') == 1 ? ' class="choosen-label"' : '') . '>Загружено</label>';
											echo '</div>';
											if($objOrder->getField('loaded') == 1) {
												echo '<div class="control-item">';
													echo '<input type="checkbox" id="unloaded" class="filter-checkbox">';
													echo '<label for="unloaded"' . ($objOrder->getField('unloaded') == 1 ? ' class="choosen-label"' : '') . '>Выгружено</label>';
												echo '</div>';
											}
											echo '<div class="control-item">';
												echo '<input type="checkbox" id="client-pay" class="filter-checkbox">';
												echo '<label for="client-pay"' . ($objOrder->getField('client_pay') == 1 ? ' class="choosen-label"' : '') . '>Оплачено клиентом</label>';
											echo '</div>';
											echo '<div class="control-item">';
												echo '<input type="checkbox" id="driver-pay" class="filter-checkbox">';
												echo '<label for="driver-pay"' . ($objOrder->getField('driver_pay') == 1 ? ' class="choosen-label"' : '') . '>Оплачено водителю</label>';
											echo '</div>';
										}
									echo '</div>';
								echo '</div>';
							echo '</div>';
						echo '</div>';
					}
					echo '<div class="clear"></div>';
				echo '</div>';
				
				
				echo '<div class="order-info">';
					echo $this->showItemInOrderInfo('Откуда', $objOrder->getField('city_from_name'));
					echo $this->showItemInOrderInfo('Куда', $objOrder->getField('city_to_name'));
					if($distance) $this->showItemInOrderInfo($isCompositive ? 'Приблизительное расстояние' : 'Расстояние', $distance, ' км');
					echo $this->showItemInOrderInfo('Описание', $objOrder->getField('description'));
					echo $this->showItemInOrderInfo('Масса', $objOrder->getField('weight'), ' тонн');
					echo $this->showItemInOrderInfo('Объём', $objOrder->getField('volume'), ' м3');
					echo $this->showItemInOrderInfo('Контактное лицо', $objOrder->getField('contact_person'));
					echo $this->showItemInOrderInfo('Телефон', $objOrder->getField('one_phone'));
					echo $this->showItemInOrderInfo('Доп. телефон', $objOrder->getField('another_phone'));
					
					$driverArray = $objOrder->getDriver();
					if(!empty($driverArray)) {
						if(SimpleAdministration::isAdmin())  echo $this->showItemInOrderInfo('Водитель заказа', '<a href="' . W_ABSPATH . 'drivers?id=' . $driverArray['ID_driver']  . '">' . $driverArray['last_name'] . ' ' . $driverArray['first_name'] . '</a>');
						else $this->showItemInOrderInfo('Водитель заказа', $driverArray['last_name'] . ' ' . $driverArray['first_name']);
					}
					
					if(SimpleAdministration::isAdmin()) {
						echo $this->showItemInOrderInfo('Наша цена', $objOrder->getField('our_price'), ' руб.');
						echo $this->showItemInOrderInfo('Цена клиента', $objOrder->getField('clients_price'), ' руб.');
						
						if($objOrder->getField('prepayment_type')) {
							$text = '';
							switch($objOrder->getField('prepayment_type')) {
								case '1' :
									$text = 'без предоплаты';
									break;
								case '2' :
									$text = 'частичная - ' . $objOrder->getField('prepayment') . ($objOrder->getField('prepayment') > 100 ? 'руб.' : '%');
									break;
								case '3' :
									$text = 'полная';
									break;
							}
						}
						else $text = 'нет данных';
						echo $this->showItemInOrderInfo('Предоплата', $text);
						
						if($objOrder->getField('delivery_date_plan')) echo $this->showItemInOrderInfo('Плановая дата сдачи',  Service_Date::changeDateFormat($objOrder->getField('delivery_date_plan'), 'Y-m-d', 'j R Y')); 
						if($objOrder->getField('delivery_date_fact')) echo $this->showItemInOrderInfo('Итоговая дата сдачи',  Service_Date::changeDateFormat($objOrder->getField('delivery_date_fact'), 'Y-m-d', 'j R Y'));
					}
					elseif(SimpleAdministration::isAuthor($objOrder->getField('ID_user'))) {
						echo $this->showItemInOrderInfo('Стоимость', $objOrder->getField('clients_price'), ' руб.');
					}
					elseif($objOrder->getField('ID_driver') == $idDriver) {
						echo $this->showItemInOrderInfo('Стоимость', $objOrder->getField('our_price'), ' руб.');
					} 
					echo $this->showItemInOrderInfo('Опубликован', Service_Date::changeDateFormat($objOrder->getField('created_at'), 'Y-m-d H-i-s', 'j R Y в H:i'));
				echo '</div>';
				echo '<div id="map-canvas"></div>';
			echo '</div>';
			echo '<div class="clear"></div>';
		echo '</div>';
		
		// Если текущий пользователь админ или автор заказа, то показываем переписку
		if(SimpleAdministration::isAuthorOrAdmin($objOrder->getField('ID_user'))) {
			$commentsArray = $objOrder->getComments();
			$this->showComments($objOrder, $commentsArray);
		}
		
	}
	
	/**
	 * Метод отображает переписку(админ - заказчик) по заказу
	 *
	 * @param Order $objOrder - объект заказа
	 * @param array $commentsArray - массив переписки
	 */
	public function showComments($objOrder, &$commentsArray) {
		Service_Debug::setDebug();
		echo '<div class="full-border comments-block">';
		echo '<div class="com-link-wrap">';
			if(SimpleAdministration::isAdmin())  echo '<a class="comment-link">Оставить комментарий заказчику</a>';
			elseif(SimpleAdministration::isAuthor($objOrder->getField('ID_user'))) echo '<a class="comment-link">Оставить комментарий администратору</a>';
		echo '</div>';
			echo '<div class="comment-form">';
				$objForm = new Form_ViewForm(array(
					'enctype' => 'multipart/form-data',
					'errorIfExists' => true,
					'viewFormType' => 'div',
				), new OrderComment());
				$objForm->show();
					$objForm->hiddenField(array('value' => User_User::getId()),'ID_user');// id текущего юзера
					$objForm->hiddenField(array('value' => $objOrder->id),'ID_order');// id текущего заказа
					$objForm->textareaField(array('class' => 'mandatory'), 'text');
					echo '<div class="form-controls">';
						$objForm->submitButton(array('value' => 'Отправить'), 'save');
						echo '<div id="file-uploader">';
							$objForm->fileField(array('value' => 'Прикрепить файл'),'comment-attach');
						echo '</div>';
					echo '</div>';
				$objForm->close();
			echo '</div>';
			echo '<div class="comments">';
				if(!empty($commentsArray)) {
					foreach ($commentsArray as $commentArray) {
						echo '<div class="comment-block">';
							echo '<div class="comm-from">';
								if($commentArray['is_admin']) {
									echo '<div class="comment-icon-admin"></div>';
									if(SimpleAdministration::isAdmin()) echo '<div  class="simple-content">Администратор №' . $commentArray['ID_user'] . '</div>';
									else   echo '<div class="simple-content">Администратор</div>';
								}
								else {
									echo '<div class="comment-icon-user"></div>';
									if(SimpleAdministration::isAdmin())  echo '<div  class="simple-content">' . $commentArray['first_name'] . ' ' . $commentArray['last_name'] . '</div>';
									else  echo '<div  class="simple-content">Вы</div>';
								}
							echo '</div>';
							echo '<div class="comment-text">';
								echo $commentArray['text'];
							echo '</div>';
							if(!empty($commentArray['attach_file_name'])) {
								echo '<div class="attach">';
									echo '<a href="' . W_FILES . 'order-comment-attach/' . $commentArray['ID_order_comment'] . '/' . $commentArray['attach_file_name'] .  '">Прикреплён файл</a>';
								echo '</div>';
							}
						echo '</div>';
					}
				}
			echo '</div>';
		echo '</div>';
	}
	
	public function showItemInOrderInfo($label, $value, $valAdd = null) {
		if(!empty($value)) {
			echo '<div class="item">';
				echo '<div class="label">' . $label . '</div>';
				echo '<div class="value">' . $value . $valAdd . '</div>';
				echo '<div class="clear"></div>';
			echo '</div>';
		} 
	}
}
?>